<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<!-- saved from url=(0044)http://www.quizful.net/post/log4j-quickstart -->
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    
    <meta name="description" content="Данная статья предназначена для того что бы консолидировать (или хотя попытаться сделать это) в одной статье, все что может понадобиться для QuickStart-а с фреймворком логирования Log4J версии 1.2.15. Статья имеет чисто практический характер: в ней не рассматривается история фреймворка или что будет в новой версии.">
    <meta name="Keywords" content="статья log4j, быстрый старт log4j, log4j quickstart, log4j overview">
    
    <link rel="image_src" href="http://www.quizful.net/res/img/logo.png">
    <meta name="verify-v1" content="6KfOvLrGm4KgPJB+V2B+ELyBzxjG+LoVhKdUcFXetdc=">
    <meta name="verify-v1" content="qYSVa9mzpQpfGqnpnzskiw2v73evzB42bGM/wcip0Hg=">
    <meta name="y_key" content="29ad813d1559a2f3">

    <title>Быстрый старт с Log4j</title>
    <style>@import '/res/reset.css?1';</style>
    <style>@import '/res/text.css?0';</style>
    <style>@import '/res/menu.css?4';</style>
    <style>@import '/res/page.css?84';</style>
    <style>@import '/res/sidebar.css?18';</style>
    <script type="text/javascript" src="./Быстрый старт с Log4j_files/jquery-1.3.2.js"></script>
    <script type="text/javascript" src="./Быстрый старт с Log4j_files/page.js"></script>
    <script type="text/javascript" src="./Быстрый старт с Log4j_files/sidebar.js"></script>
    <script type="text/javascript" src="./Быстрый старт с Log4j_files/contributor.js"></script>

    <style type="text/css">@import url( "/res/tooltip/tooltip.css" );</style>
    <script type="text/javascript" src="./Быстрый старт с Log4j_files/tooltip.js"></script>

    <script>
        //IE6 идет на$#%
        if ('\v'=='v' && !window.XMLHttpRequest) window.location='/res/no-ie6.html';
        jQuery(function() { pageInit(); });
    </script>
    <link rel="icon" href="http://www.quizful.net/res/favicon.ico">
<script src="./Быстрый старт с Log4j_files/share.php"></script><link rel="stylesheet" type="text/css" href="./Быстрый старт с Log4j_files/share-button-css"><script src="./Быстрый старт с Log4j_files/restserver.php"></script></head>
<body data-twttr-rendered="true">

    <div id="header">
                <a id="logo" title="Онлайн тесты" href="http://www.quizful.net/"></a>

        <div id="feedback-block">
    <div class="feedback-block-button closed" onclick="toggleBlock(jQuery.event.fix(event), &#39;#feedback-block&#39;); return false;"></div>

    <div class="content">
        <div class="corners"><b></b><u></u><i></i></div>
        
        <form id="feedback" action="">
            <div class="errors hidden"></div>
            <textarea id="feedback-text" name="text"></textarea>
                            <div class="captcha">
                    <img class="captcha-img" src="./Быстрый старт с Log4j_files/feedback" style="cursor:pointer;">
                    <label for="feedback-code">Введите число</label>
                    <input id="feedback-code" type="text" name="captcha">
                </div>
                        <div class="buttons"><input type="button" value="Отправить"></div>
        </form>
    </div>
</div>
<script type="text/javascript">
    new Feedback();
    $(document).bind('click', handleClickOutside);

    function handleClickOutside(e) {
        var blocks = ['#feedback-block', '#invite-block'];
        for (var id in blocks) {
            var blockEl = jQuery(blocks[id] + " .content");

            if (jQuery.find(blocks[id]).length > 0 && blockEl.attr('display') != 'none') {
                if (jQuery(e.target).parents().index(jQuery(blocks[id])) == -1 && !jQuery(e.target).parent().hasClass('thanks')
                        && jQuery(e.target).attr('id') != blocks[id].substring(1)) {

//                    alert(jQuery(e.target).parents().map(function() { return this.tagName + " id=" + this.id; }).get().join());

                    blockEl.slideUp(250);
                    jQuery((blocks[id] + '-button').replace('#', '.')).removeClass('opened').addClass('closed');
                }
            }
        }
    }

    function toggleBlock(e, block) {
        if (jQuery(e.target).hasClass('opened')) {
            jQuery(block + ' .content').slideUp(250);
            jQuery(e.target).removeClass('opened').addClass('closed');
        } else {
            jQuery(e.target).removeClass('closed').addClass('opened');
            jQuery(block + ' .content').slideDown(250);
        }
    }
</script>

        <ul id="navigation">
                                    <li class="
            first                         ">
                <b></b><a href="http://www.quizful.net/test">Главная</a>
                            </li>
            <li class="sep"></li>
                                                                        <li class="
                                                                                                                                                                                                                                                                                                                ">
                <a href="http://www.quizful.net/posts">Статьи</a>
                            </li>
            <li class="sep"></li>
                                                                        <li class="
                                                                                                                                                                                                                                         last">
                <a href="http://www.quizful.net/page/about">О проекте</a><b></b>
                                    <ul class="sub">
                                                <li class="">
                            <a href="http://www.quizful.net/page/about">описание</a>
                        </li>
                                                <li class="">
                            <a href="http://www.quizful.net/ratings">рейтинги</a>
                        </li>
                                                <li class="">
                            <a href="http://www.quizful.net/page/hall-of-fame">зал славы</a>
                        </li>
                                                <li class="">
                            <a href="http://www.quizful.net/page/certification-exams">сертификаты</a>
                        </li>
                                                <li class="">
                            <a href="http://www.quizful.net/faq">faq</a>
                        </li>
                                                <li class="last"><b class="left"></b><b class="middle"></b><b class="right"></b></li>
                    </ul>
                            </li>
            
                                                        </ul>
        <ul id="logged-panel">
            <li class="head"></li>
            <li> <a href="http://www.quizful.net/LoginAction.loginForm" rel="nofollow">войти</a> </li>
            <li class="separator"></li>
                                    <li> <a href="http://www.quizful.net/LoginAction.registration" rel="nofollow">зарегистрироваться</a> </li>
            <li class="tail"></li>
        </ul>
    </div>
    <div id="content" style="min-height: 486px; ">
        <div id="contributor"></div>
        <div id="left">
                        <div class="a-block">
                <div class="corners"><s></s><b></b><u></u><i></i></div>
                <div class="sides"><s></s><b></b><u></u><i></i></div>
                <div class="content">
                    Для пользователей, которые регистрируются. Если Вам не приходит письмо с подтверждением email, пишите на admin[at]quizful[dot]net - будем подтверждать вручную. Просим прощения за доставленные неудобства.<br><br>
С уважением,<br>
команда Quizful
                </div>
            </div>
                        <div id="tips-block" class="sblock opened">
    <div class="corners"><s></s><b></b><u></u><i></i></div>
    <div class="title"><b>Знаете ли Вы, что</b></div>
    <div class="content">
        <p id="tips-text">Свои вопросы для тестов можно добавлять на странице с информацией о тесте. При этом для некоторых тестов добавление вопросов закрыто</p>
        <input id="tip-index" type="hidden" value="3">
        <p class="link">
            <img src="./Быстрый старт с Log4j_files/loading.gif" alt="Loading" id="tips-loading" align="absmiddle" style="display: none; ">
            <span class="arrow">←</span>
            <span class="arrow">→</span>
        </p>
    </div>
</div>
<script type="text/javascript"> new Tips(); </script>


            <div id="contributors" class="sblock">
    <div class="corners"><s></s><b></b><u></u><i></i></div>
    <div class="title"><b>Топ контрибуторов</b></div>
    <div class="content" id="contributors-content">
        <select id="contributors-report">
            <option value="day">За последние сутки</option>
            <option value="month">За последний месяц</option>
            <option value="all">За весь период</option>
        </select>
        <img src="./Быстрый старт с Log4j_files/loading.gif" id="contributors-loading-select" alt="loading" align="absmiddle" style="display: none; ">
        <div id="contributors-table"><table class="table"><tbody><tr class="second"><td class="login">Нет данных</td></tr></tbody></table><a href="http://www.quizful.net/page/contribute" style="float:left; margin: 3px 0 0 5px;">Получение Q</a></div>
        <div id="contribution-paging" class="paging">
            <img src="./Быстрый старт с Log4j_files/loading.gif" alt="loading" id="contributors-loading" align="absmiddle" style="display: none; ">
            <span class="arrow" style="color: gray; cursor: default; ">←</span>
            <span class="arrow" style="color: gray; cursor: default; ">→</span>
        </div>
    </div>
</div>
<script type="text/javascript">
    if (Cookie.get("reportType"))
        document.getElementById("contributors-report").value = Cookie.get("reportType");
    new TopContributors();
</script>
            
                        <div id="globalfeed" class="sblock">
    <div class="corners"><s></s><b></b><u></u><i></i></div>
    <div class="title"><b>Лента обновлений</b></div>
    <div class="content">
        <table>
                            <tbody><tr><td>
                    <a href="http://www.quizful.net/post/inner-classes-java#6258117319951072930">ссылка</a>
                    <span>11:27:58</span>
                    <div>
                    Комментарий от Seen:<br>=======================================<br>Users.Query query =...
                </div></td></tr>
                            <tr class="even"><td>
                    <a href="http://www.quizful.net/TestStoreAction.viewQuestion?question=orGOkGv77z6b#9045323940112430615">ссылка</a>
                    <span>09:38:54</span>
                    <div>
                    Комментарий от ksp107:<br>Потому что в /* 6 */ строке возникнет уже ВТОРАЯ ошибка к...
                </div></td></tr>
                            <tr><td>
                    <a href="http://www.quizful.net/TestStoreAction.viewQuestion?question=orGOkGv77z6b#4653281702327692817">ссылка</a>
                    <span>07:14:14</span>
                    <div>
                    Комментарий от med01:<br>/* 5 */ final public abstract E {}<br><br>/* 6 */ static final a...
                </div></td></tr>
                            <tr class="even"><td>
                    <a href="http://www.quizful.net/interview/java/final-variables-init#4817309080695983454">ссылка</a>
                    <span>May 3 11:15</span>
                    <div>
                    Комментарий от pmn:<br>Здесь, видимо, имелось ввиду следующее. Конечно final переме...
                </div></td></tr>
                            <tr><td>
                    <a href="http://www.quizful.net/test/quality-assurance-basics#2116143040308579884">ссылка</a>
                    <span>May 3 10:43</span>
                    <div>
                    Комментарий от stalkermiha:<br>кто знает еще тесты подобного плана, где в конце ест...
                </div></td></tr>
                    </tbody></table>
    </div>
</div>

                        <div id="statistics" class="sblock">
                <div class="corners"><s></s><b></b><u></u><i></i></div>
                <div class="title"><b>Статистика</b></div>
                <div class="content">
                    <p>Тестов: 130, вопросов: 5790.
                    Пройдено: 124856 / 518230.</p>
                </div>
            </div>
                    </div>
        <div id="middle">
            <div id="page-title-hr"></div>
            <style>@import '/posts/posts.css?4';</style>

<script type="text/javascript" src="./Быстрый старт с Log4j_files/jquery.chili.min-2.2.js"></script>
<script type="text/javascript" src="./Быстрый старт с Log4j_files/share.js" charset="windows-1251"></script>

<h1 id="page-title" style="height:auto;">Быстрый старт с Log4j</h1>
        <div class="post">
    <div id="post-info" class="rform">
        <div class="corners"><s></s><b></b><u></u><i></i></div>
        <div class="title">
            <img class="head" src="./Быстрый старт с Log4j_files/blank.gif" alt="head">
            <img class="tail" src="./Быстрый старт с Log4j_files/blank.gif" alt="tail">
            <b>Информация о статье</b>
        </div>
        <div class="content">
            <table>
                                <tbody><tr class="even category"><td colspan="2"><span>категория</span><br><a href="http://www.quizful.net/category/java_tools">Java Tools</a></td></tr>
                                <tr><td>дата</td><td>03.11.2009</td></tr>
                <tr class="even"><td>автор</td><td><a href="http://www.quizful.net/user/generator">generator</a></td></tr>
                <tr><td>голосов</td><td id="votes">12</td></tr>
            </tbody></table>
        </div>
    </div>

    <div class="text" style="margin-right:260px;">
        <style>
    .level_fatal { color:#ff0000; font-weight:bold; }
    .level_error { color:#99cc00; font-weight:bold; }
    .level_warn { color:#808000; font-weight:bold; }
    .level_info { color:#3366ff; font-weight:bold; }
    .level_debug, .level_trace { color:#993366; font-weight:bold; }

    #wikiinfo tbody tr td:first-child { font-weight:bold; }
</style>
<h2>Обзор</h2>
<p>Первый источник это Wikipedia, в ней мы сможем почерпнуть достаточно скудную информацию лишь о компании разработчике и целях проекта.</p><p>1.&nbsp;<a href="http://ru.wikipedia.org/wiki/Log4j">http://ru.wikipedia.org/wiki/Log4j</a>
</p><p>
<strong>Log4j</strong>&nbsp;— библиотека журналирования
Java программ, часть общего проекта «Apache
Logging Project».</p>
<p>
</p><table id="wikiinfo" align="right" border="1" cellspacing="0" width="378">
	<tbody><tr><td colspan="2" style="text-align: center;" width="376">Apache log4j</td></tr><tr><td width="125">Тип</td><td width="249">Журналирование</td></tr><tr><td width="125">Разработчик</td><td width="249">Apache Software Foundation</td></tr><tr><td width="125">Написана на</td><td width="249">Java</td></tr><tr><td width="125">ОС</td><td width="249">Кроссплатформенное ПО</td></tr><tr><td width="125">Версия</td><td width="249">1.2.15 — 29 сентября 2007</td></tr><tr><td width="125">Тестовая версия</td><td width="249">2.0</td></tr><tr><td width="125">Лицензия</td><td width="249">Apache License 2.0</td></tr><tr><td width="125">Сайт</td><td width="249"><a href="http://logging.apache.org/log4j">http://logging.apache.org/log4j</a><span style="color: rgb(136, 136, 136);">(англ.)</span></td></tr></tbody></table>&nbsp;<p></p>
<p><br></p><p><br></p><p><br></p><p><br></p><p><br></p>
<br>
<br>
<br>
<p>Log4j первоначально развивался в рамках зонтичного Apache Jakarta Project, ответственного за все Java-проекты Apache, но впоследствии выделился в отдельный, очень популярный проект журналирования (стандарт де-факто).</p>
<p>2.
&nbsp;<u><a href="http://www.log4j.ru/res/articles/HelloWorld.html">http://www.log4j.ru/res/articles/HelloWorld.html</a></u></p><div>Собственно
русскоязычный ресурс компании
разработчика, на нем тоже есть описание
целей и задач, основных возможностей и
небольшие примеры использования.</div><div>&nbsp;

<br>&nbsp;&nbsp; &nbsp;Ознакомившись
с двумя предыдущими источниками
подключить и выполнить примеры Вы
конечно же сможете, но что это нам даст,
спросите Вы, вряд ли кто то будет
выкладывать у себя примеры со сложными
реализациями. Да примеры и должны быть
простыми, сразу возразят поклонники
простоты и лаконичности.

         Но как
это обычно бывает, все примитивные
примеры носят мало практической пользы
и любой «шаг вправо или шаг влево»
повлечет за собой поиски новых источников
с описанием настроек и подводных камней.

Принимая во
внимание все выше сказанное, начнем
сначала.<br>
<br>&nbsp;&nbsp; &nbsp;Итак –
Log4J – фреймворк для скрытия реализации
<em>рутинных</em> операций по логированию
(журналированию) некоторых событий,
которые происходят во время работы
Вашего приложения написанного на Java
(есть портированные библиотеки и для
других языков).

       Что значит
<em>рутинных</em> – все кто, когда либо имел
желание сохранить какую либо информацию
во время работы приложения такую как -
трассировка выполнения конструкторов,
методов, блоков обработки критических
ситуаций, сталкивался с одними и теми
же операциями, а именно:
<ul>
	<li>Выбор
	хранилища – консоль, файл, СУБД;
	</li><li>Конфигурация
	хранилища – именование хранилища,
	объем хранилища, путь к хранилищу,
	сохранение конфигурации;
	</li><li>Форматирование
	записей журнала – дата/время, класс/метод
	и т.д., гибкое форматирование.
</li></ul>
<p style="margin-left: 1.4cm; margin-bottom: 0cm;"><br>
</p>Все эти операции
фреймворк позволяет автоматизировать,
а конфигурацию параметров хранить в
одном файле конфигураций отдельно.
<br>

Таким образом,
от пользователей фрейворка необходимо
лишь:
<ul>
	<li>загрузить
	библиотеку фреймворка;
	</li><li>создать
	конфигурационный файл с параметрами
	журналирования;
	</li><li>создать
	объект журнала (лога) в своем приложении;
	</li><li>воспользоваться
	методами для записи в журнал.</li></ul>

Продолжим по
порядку. Библиотеку загрузили.</div><div>&nbsp;

<br><h3>Каким образом
хранить конфигурацию журналирования?&nbsp;</h3>

</div><div>&nbsp;&nbsp; &nbsp;Есть два
типа конфигурационных файлов формат
XML и формат PROPERTIES.
В случае
одноименных файлов выше приоритет у
файлов XML.&nbsp;</div><div><br><h3>Как конфигурировать файл&nbsp;log4j.properties или log4j.xml?</h3></div><div>
<p><strong>log4j.properties</strong></p>
Формат файла
«properties» т.е. ключ = значение, все строки
начинающееся с символа # и до конца
строки (символы \n\r) означают комментарий.

Формат ключей
 в файле конфигураций  следующий:
<ul>
	<li>log4j.rootLogger –
	глобальный объект журнала, значением
	этого ключа, необходимо указать приоритет логируемой информации.
	Приоритетов может быть <span style="font-weight: bold;">ШЕСТЬ (log4j1.2.*)</span>:
	<ul>
		<li><span class="level_fatal">FATAL</span> - произошла фатальная ошибка - у этого сообщения наивысший приоритет</li>
        <li><span class="level_error">ERROR</span> - в программе произошла ошибка</li>
        <li><span class="level_warn">WARN</span> - предупреждение в программе что-то не так</li>
        <li><span class="level_info">INFO</span> - информация.</li>
        <li><span class="level_debug">DEBUG</span> - детальная информация для отладки</li>
        <li><span class="level_trace">TRACE</span>– трассировка всех сообщений в указанный аппендер</li>
        <li><span style="font-weight: bold;">OFF</span>&lt;
            <span class="level_trace">TRACE</span>&lt;
            <span class="level_debug">DEBUG</span>&lt;
            <span class="level_info">INFO</span>&lt;
            <span class="level_warn">WARN</span>&lt;
            <span class="level_error">ERROR</span>&lt;
            <span class="level_fatal">FATAL</span>&lt;
            <span style="font-weight: bold;">ALL</span>
		<ul>
			<li>Приоритеты приоритетами, но буквально все зависит от Вас, не стоит надеяться, что подключив
			фреймворк, ваш код станет волшебным образом писать в логи все сам, нет!  На самом деле это не приоритеты настоящих
			сообщений – это приоритеты для самого объекта, что бы он мог их различать. Ничто Вам не помешает сделать запись
			в журнал из блока обработки критических ситуаций с пометкой INFO.
		</li></ul>
	</li></ul>
	</li><li>log4j.logger.<em>имя_аппендера</em>
	– собственно из названия можно понять
	что, это именованный объект позволяющий
	выполнять добавление чего-то к чему-то,
	в нашем случае добавляет данные в
	журнал. Выгода от использования
	именованного объекта существенна, так
	как именно Вы выбираете имя! В качестве
	имени может быть:
	<ul>
		<li>любой
		литерал;
		</li><li>имя класса,
		что позволяет инициализировать объект
		Logger следующим образом
		<span lang="uk-UA">:</span>
		<ul>
			<li>Logger.getLogger(<em>имя_класса</em>.class.getClass())<span lang="uk-UA">
			– дання конструкция позволяет
			обратиться к аппендеру по полному
			имени т.е. </span><span lang="uk-UA"><em>имя_пакета.имя_класса</em></span>;
			</li><li>Logger.getLogger(<em>имя_класса</em>.class.
			getSimpleName()) – данная
			конструкция позволяет обращаться по
			простому имени т.е. вы должны быть
			уверены что не возникнет конфликта с
			одноименными классами, иначе запись
			в журнал выполнена НЕ БУДЕТ!;
		</li></ul>
	</li></ul>
	</li><li>log4j.appender.<em>имя_аппендера</em>
	– значение данного ключа это тип
	аппендера и от него будут зависеть
	остальные ключи и значения для данного
	типа. Вот пример нескольких:
	<ul>
		<li>org.apache.log4j.ConsoleAppender
		<ul>
			<li>log4j.appender.<em>имя_аппендера.</em>Target
			– собственно, куда выводить информацию,
			например это может быть стандартный(Java)
			System.out or System.err
		</li></ul>
		</li><li>org.apache.log4j.FileAppender
		</li><li>org.apache.log4j.DailyRollingFileAppender
		</li><li>org.apache.log4j.RollingFileAppender
		</li><li>org.apache.log4j.net.SMTPAppender
		</li><li>org.apache.log4j.AsyncAppender
		</li><li>org.apache.log4j.nt.NTEventLogAppender
		</li><li>org.apache.log4j.net.SyslogAppender
		</li><li>org.apache.log4j.jdbc.JDBCAppender
		</li><li>org.apache.log4j.lf5.LF5Appender
		</li><li>org.apache.log4j.net.SocketAppender
		</li><li>org.apache.log4j.net.SocketHubAppender
		</li><li>org.apache.log4j.net.TelnetAppender
		</li><li>org.apache.log4j.net.JMSAppender
		- посылает JMS сообщения
		</li><li>org.apache.log4j.varia.ExternallyRolledFileAppender
	</li></ul>
	</li><li>log4j.appender.<em>
	имя_аппендера</em>.layout – шаблон форматирования
	строки журнала, <br><strong>org.apache.log4j.SimpleLayout –
	самый примитивный.</strong>
	<ul>
		<li>log4j.appender.<em>имя_аппендера</em>.layout.ConversionPattern – шаблон
		форматирования, в строку можно добавить некоторую полезную информацию:
		<ul>
			<li> %p – имя приоритета, с которым было выполнена запись данных
			</li><li> %F – имя файла, из которого был вызван метод записи в журнал
			</li><li> %M – имя метода, из которого был вызван метод записи в журнал
			</li><li> %L – номер строки, в файле из которого был вызван метод записи в журнал
			</li><li> %c – имя категории (т.е. аппендера, логера) </li><li> %d – дата
			записи, в журнал по данным JVM из которой был запущен процесс
			<ul>
				<li>В скобках можно указать формат вывода, о нем
				можно прочитать в хэлпе к стандартному классу SimpleDateFormat.
			</li></ul>
			</li><li> %m – собственно само сообщение, которое Вы посылаете для записи в журнал
			</li><li> %n – символ окончания строки
		</li></ul>
	</li></ul>
	</li><li>для более конкретных приемников логирования используйте конкретные типы аппендеров.</li></ul>
<br>
<u><a href="http://log4j.ru/res/articles/ConfiguationFiles.html">Примеры
файлов конфигурации </a></u>:
<table border="1" bordercolor="#000000" cellpadding="7" cellspacing="0" width="704">
	
	
	<tbody><tr valign="top"><td width="316">
			<p>1
			   <em>log4j.rootCategory</em>=DEBUG,
			console</p>
			<p>2
			   <em>log4j.appender.console</em>=org.apache.log4j.ConsoleAppender</p>
			<p>3
			   <em>log4j.appender.console.layout</em>=org.apache.log4j.PatternLayout</p>
			<p>4
			   <em>log4j.appender.console.layout.ConversionPattern</em>=
			%p
			%c: %m%n</p>
			<u><a href="ftp://log4j.ru/pub/java/log4j.ru/Log4jHelloWorld/log4j.properties">скачать
			исходный код</a></u>
			
			<p><br>
			</p>
		</td><td width="358"><em>

<p class="western" style="margin-bottom: 0cm;">
<em><font style="font-size: 8pt;" size="1"><span lang="en-US">&lt;?</span></font></em><font color="#0000ff"><strong><font style="font-size: 8pt;" size="1"><span lang="en-US">xml
version=</span></font></strong></font><font color="#008000"><strong><font style="font-size: 8pt;" size="1"><span lang="en-US">"1.0"
</span></font></strong></font><font color="#0000ff"><strong><font style="font-size: 8pt;" size="1"><span lang="en-US">encoding=</span></font></strong></font><font color="#008000"><strong><font style="font-size: 8pt;" size="1"><span lang="en-US">"UTF-8"
</span></font></strong></font><em><font style="font-size: 8pt;" size="1"><span lang="en-US">?&gt;</span></font></em><font style="font-size: 8pt;" size="1"><span lang="en-US"><br></span></font><font color="#000080"><strong><font style="font-size: 8pt;" size="1"><span lang="en-US">&lt;!DOCTYPE
log4j:configuration SYSTEM "log4j.dtd"&gt;</span></font></strong></font><font style="font-size: 8pt;" size="1"><span lang="en-US"><br></span></font><font style="font-size: 8pt;" size="1"><span lang="en-US">&lt;</span></font><font color="#000080"><strong><font style="font-size: 8pt;" size="1"><span lang="en-US">log4j:configuration
</span></font></strong></font><font color="#0000ff"><strong><font style="font-size: 8pt;" size="1"><span lang="en-US">xmlns:log4j=</span></font></strong></font><font color="#008000"><strong><font style="font-size: 8pt;" size="1"><span lang="en-US">"http://jakarta.apache.org/log4j/"</span></font></strong></font><font style="font-size: 8pt;" size="1"><span lang="en-US">&gt;</span></font><font style="font-size: 8pt;" size="1"><span lang="en-US"><br></span></font><font style="font-size: 8pt;" size="1"><span lang="en-US">&lt;</span></font><font color="#000080"><strong><font style="font-size: 8pt;" size="1"><span lang="en-US">appender
</span></font></strong></font><font color="#0000ff"><strong><font style="font-size: 8pt;" size="1"><span lang="en-US">name=</span></font></strong></font><font color="#008000"><strong><font style="font-size: 8pt;" size="1"><span lang="en-US">"console"
</span></font></strong></font><font color="#0000ff"><strong><font style="font-size: 8pt;" size="1"><span lang="en-US">class=</span></font></strong></font><font color="#008000"><strong><font style="font-size: 8pt;" size="1"><span lang="en-US">"org.apache.log4j.ConsoleAppender"</span></font></strong></font><font style="font-size: 8pt;" size="1"><span lang="en-US">&gt;</span></font><font style="font-size: 8pt;" size="1"><span lang="en-US"><br></span></font><font style="font-size: 8pt;" size="1"><span lang="en-US">&lt;</span></font><font color="#000080"><strong><font style="font-size: 8pt;" size="1"><span lang="en-US">param
</span></font></strong></font><font color="#0000ff"><strong><font style="font-size: 8pt;" size="1"><span lang="en-US">name=</span></font></strong></font><font color="#008000"><strong><font style="font-size: 8pt;" size="1"><span lang="en-US">"Target"
</span></font></strong></font><font color="#0000ff"><strong><font style="font-size: 8pt;" size="1"><span lang="en-US">value=</span></font></strong></font><font color="#008000"><strong><font style="font-size: 8pt;" size="1"><span lang="en-US">"System.out"</span></font></strong></font><font style="font-size: 8pt;" size="1"><span lang="en-US">/&gt;</span></font><font style="font-size: 8pt;" size="1"><span lang="en-US"><br></span></font><font style="font-size: 8pt;" size="1"><span lang="en-US">&lt;</span></font><font color="#000080"><strong><font style="font-size: 8pt;" size="1"><span lang="en-US">layout
</span></font></strong></font><font color="#0000ff"><strong><font style="font-size: 8pt;" size="1"><span lang="en-US">class=</span></font></strong></font><font color="#008000"><strong><font style="font-size: 8pt;" size="1"><span lang="en-US">"org.apache.log4j.PatternLayout"</span></font></strong></font><font style="font-size: 8pt;" size="1"><span lang="en-US">&gt;</span></font><font style="font-size: 8pt;" size="1"><span lang="en-US"><br></span></font><font style="font-size: 8pt;" size="1"><span lang="en-US">&lt;</span></font><font color="#000080"><strong><font style="font-size: 8pt;" size="1"><span lang="en-US">param
</span></font></strong></font><font color="#0000ff"><strong><font style="font-size: 8pt;" size="1"><span lang="en-US">name=</span></font></strong></font><font color="#008000"><strong><font style="font-size: 8pt;" size="1"><span lang="en-US">"ConversionPattern"
</span></font></strong></font><font color="#0000ff"><strong><font style="font-size: 8pt;" size="1"><span lang="en-US">value=</span></font></strong></font><font color="#008000"><strong><font style="font-size: 8pt;" size="1"><span lang="en-US">"%p
%c: %m%n"</span></font></strong></font><font style="font-size: 8pt;" size="1"><span lang="en-US">/&gt;</span></font><font style="font-size: 8pt;" size="1"><span lang="en-US">&lt;/</span></font><font color="#000080"><strong><font style="font-size: 8pt;" size="1"><span lang="en-US">layout</span></font></strong></font><font style="font-size: 8pt;" size="1"><span lang="en-US">&gt;</span></font><font style="font-size: 8pt;" size="1"><span lang="en-US"><br></span></font><font style="font-size: 8pt;" size="1"><span lang="en-US">&lt;/</span></font><font color="#000080"><strong><font style="font-size: 8pt;" size="1"><span lang="en-US">appender</span></font></strong></font><font style="font-size: 8pt;" size="1"><span lang="en-US">&gt;</span></font><font style="font-size: 8pt;" size="1"><span lang="en-US"><br></span></font><font color="#808080"><em><font style="font-size: 8pt;" size="1"><span lang="en-US">&lt;!--</span></font></em></font><font color="#808080"><em><font style="font-size: 8pt;" size="1">Корневой</font></em></font><font color="#808080"><em><font style="font-size: 8pt;" size="1"><span lang="en-US">
logger--&gt;</span></font></em></font><font style="font-size: 8pt;" size="1"><span lang="en-US"><br></span></font><font style="font-size: 8pt;" size="1"><span lang="en-US">&lt;</span></font><font color="#000080"><strong><font style="font-size: 8pt;" size="1"><span lang="en-US">root</span></font></strong></font><font style="font-size: 8pt;" size="1"><span lang="en-US">&gt;</span></font><font style="font-size: 8pt;" size="1"><span lang="en-US">&lt;</span></font><font color="#000080"><strong><font style="font-size: 8pt;" size="1"><span lang="en-US">priority
</span></font></strong></font><font color="#0000ff"><strong><font style="font-size: 8pt;" size="1"><span lang="en-US">value
=</span></font></strong></font><font color="#008000"><strong><font style="font-size: 8pt;" size="1"><span lang="en-US">"debug"
</span></font></strong></font><font style="font-size: 8pt;" size="1"><span lang="en-US">/&gt;</span></font><font style="font-size: 8pt;" size="1"><span lang="en-US"><br></span></font><font style="font-size: 8pt;" size="1"><span lang="en-US">&lt;</span></font><font color="#000080"><strong><font style="font-size: 8pt;" size="1"><span lang="en-US">appender-ref
</span></font></strong></font><font color="#0000ff"><strong><font style="font-size: 8pt;" size="1"><span lang="en-US">ref=</span></font></strong></font><font color="#008000"><strong><font style="font-size: 8pt;" size="1"><span lang="en-US">"console"
</span></font></strong></font><font style="font-size: 8pt;" size="1"><span lang="en-US">/&gt;</span></font><font style="font-size: 8pt;" size="1"><span lang="en-US"><br></span></font><font style="font-size: 8pt;" size="1"><span lang="en-US">&lt;/</span></font><font color="#000080"><strong><font style="font-size: 8pt;" size="1"><span lang="en-US">root</span></font></strong></font><font style="font-size: 8pt;" size="1"><span lang="en-US">&gt;</span></font><font style="font-size: 8pt;" size="1"><span lang="en-US"><br></span></font><font style="font-size: 8pt;" size="1"><span lang="en-US">&lt;/</span></font><font color="#000080"><strong><font style="font-size: 8pt;" size="1"><span lang="en-US">log4j:configuration</span></font></strong></font><font style="font-size: 8pt;" size="1"><span lang="en-US">&gt;</span></font></p>
<p class="western" style="margin-bottom: 0cm;"><a href="ftp://log4j.ru/pub/java/log4j.ru/Log4jHelloWorld/log4j.xml"><font color="#000080"><span lang="zxx"><u>скачать&nbsp;</u></span></font><font color="#000080"><span lang="zxx"><u>исходный&nbsp;</u></span></font><font color="#000080"><span lang="zxx"><u>код</u></span></font></a></p>
</em></td></tr></tbody></table>
<br>

<br><h2>Советы по использованию Log4J</h2>

<div>Что необходимо
сделать перед началом работы:
<ul>
	<li>Определите
	<strong>События,</strong> подлежащие записи в журнал;
	</li><li>Определите
	ключевые <strong>Параметры,</strong> для каждого
	События;
	</li><li>Определите
	<strong>Источники</strong> Событий – это самое
	важное, иначе ваша система логирования
	превратится в свалку не нужных Событий
	с таким же перечнем ненужных Параметров;
</li></ul>
Как использовать
инструмент:
<ul>
	<li>Не старайтесь
	разделить системы логирования по
	приоритетам (FATAL or
	INFO), разделите по
	функциональным модулям или ключевым
	Объектам системы;
	</li><li>Выполняйте
	логирование жизненного цикла Объекта;
</li></ul>
<p>Журналирование
событий это лишь часть функциональности
Вашего приложения, не стоит ставить
приоритет этой задачи выше приоритета
основной функциональности.<br></p>
<h2>Как использовать Log4J в Java приложениях?</h2><p>Для
использования всех функциональных
возможностей фрейворка необходимо
создать объект журнала.</p>
<br>

Пример для
Java Application.
<table border="1" bordercolor="#000000" cellpadding="7" cellspacing="0" width="728">
	
	
	<tbody><tr valign="top"><td width="316">
			<p> Файл Main.java</p>
		</td><td width="382">Файл log4j.properties ,располагается
			в корневой папке проекта, иначе укажите корректный путь в файле класса
		</td></tr><tr valign="top"><td width="316">
			import java.io.FileInputStream;<br>
			import java.io.FileNotFoundException;<br>
			import java.io.IOException;<br>
			import java.io.InputStream;<br>
			import java.util.Enumeration;<br>
			import java.util.Properties;<br>
			import org.apache.log4j.*;<br>
			/**<br>
			*<br>
			@author generator<br>
			 */<br>
			public class Main {<br>
			<br>
			public static void main(String[] args) throws FileNotFoundException, IOException {<br>
			<strong>1:</strong>String nameFile = "log4j.properties";<br>
			<strong>2:</strong>PropertyConfigurator.configure(nameFile);<br>
			        /*1*/Logger LOG = Logger.getRootLogger();<br>
			        /*2*/Logger localLog2 = Logger.getLogger("logfile");<br>
			/*3*/Enumeration append = LOG.getAllAppenders();<br>
			        /*3*/while (append.hasMoreElements()) {<br>
			<br>
			/*3*/LOG.info("Available appender " + append.nextElement());<br>
			       /*3*/}<br>
			<br>
			LOG.info("Hi Logger info!");<br>
			localLog2.warn("logfile write!");<br>
			System.out.println("LOG.equals(localLog) is " + LOG.equals(localLog));<br>
			    }<br>
			}<br>
			
		</td><td width="382">
<p class="western" style="margin-bottom: 0cm;"><font style="font-size: 8pt;" size="1">#
</font><font style="font-size: 8pt;" size="1"><strong>это секция
комментариев с описанием форматирования,
которую я </strong></font>
</p>
<p class="western" style="margin-bottom: 0cm;"><font style="font-size: 8pt;" size="1"><strong>#
добавил в шаблон генерации файлов, в
</strong></font><font style="font-size: 8pt;" size="1"><span lang="en-US"><strong>IDE</strong></span></font><font style="font-size: 8pt;" size="1"><span lang="en-US"><strong>NetBeans</strong></span></font><font style="font-size: 8pt;" size="1"><strong>.</strong></font></p>
<p class="western" style="margin-bottom: 0cm;"><font style="font-size: 8pt;" size="1"><span lang="en-US">#
%F - file name (example Main.java)</span></font><font color="#ff0000"><font style="font-size: 8pt;" size="1"><span lang="en-US">avoided
unless execution speed is not an issue.</span></font></font></p>
<p class="western" style="margin-bottom: 0cm;"><font style="font-size: 8pt;" size="1"><span lang="en-US">#
%M </span></font><font style="font-size: 8pt;" size="1"><span lang="en-US">–
method (</span></font><font color="#ff0000"><font style="font-size: 8pt;" size="1"><span lang="en-US">avoided
unless execution speed is not an issue.</span></font></font><font style="font-size: 8pt;" size="1"><span lang="en-US">)</span></font></p>
<p class="western" style="margin-bottom: 0cm;"><font style="font-size: 8pt;" size="1"><span lang="en-US">#
%L - line number in file (</span></font><font color="#ff0000"><font style="font-size: 8pt;" size="1"><span lang="en-US">avoided
unless execution speed is not an issue.</span></font></font><font style="font-size: 8pt;" size="1"><span lang="en-US">)</span></font></p>
<p class="western" style="margin-bottom: 0cm;"><font style="font-size: 8pt;" size="1"><span lang="en-US">#
%C – class name (</span></font><font color="#ff0000"><font style="font-size: 8pt;" size="1"><span lang="en-US">avoided
unless execution speed is not an issue.</span></font></font><font style="font-size: 8pt;" size="1"><span lang="en-US">)</span></font></p>
<p class="western" style="margin-bottom: 0cm;" lang="en-US"><font style="font-size: 8pt;" size="1">#
%p - priority name</font></p>
<p class="western" style="margin-bottom: 0cm;" lang="en-US"><font style="font-size: 8pt;" size="1">#
%c - category name i.e. stdout, console, logfile and etc</font></p>
<p class="western" style="margin-bottom: 0cm;" lang="en-US"><font style="font-size: 8pt;" size="1">#
%d - date write record </font>
</p>
<p class="western" style="margin-bottom: 0cm;" lang="en-US"><font style="font-size: 8pt;" size="1">#
%d{} - date write record , options {hh:mm:ss} or {HH:MM:SS} or
combination</font></p>
<p class="western" style="margin-bottom: 0cm;" lang="en-US"><font style="font-size: 8pt;" size="1">#
%m - message</font></p>
<p class="western" style="margin-bottom: 0cm;" lang="en-US"><font style="font-size: 8pt;" size="1">#
%n - end line \n working in any way</font></p>
#
			<span style="font-weight: bold;">OFF</span>&lt;
            <span class="level_trace">TRACE</span>&lt;
            <span class="level_debug">DEBUG</span>&lt;
            <span class="level_info">INFO</span>&lt;
            <span class="level_warn">WARN</span>&lt;
            <span class="level_error">ERROR</span>&lt;
            <span class="level_fatal">FATAL</span>&lt;
            <span style="font-weight: bold;">ALL</span>
            <br>
            <br>           
			log4j.rootLogger
			= TRACE, console
			
			log4j.appender.console=org.apache.log4j.ConsoleAppender
			<p>log4j.appender.console.layout=org.apache.log4j.PatternLayout</p>
			<p>log4j.appender.console.layout.ConversionPattern=[%p]
			%d{hh:mm:ss} (%F:%M:%L)%m %n%n</p>
			<p>#все
			выводится на консоль</p>
			<p>log4j.appender.console.Target=System.out</p>
			<p>#
			overview log file</p>
			log4j.logger.logfile=WARN,
			logfile
			<p>log4j.appender.logfile=org.apache.log4j.RollingFileAppender</p>
			log4j.appender.logfile.File=D:\\warnlog.txt
			log4j.appender.logfile.MaxBackupIndex=10
			
			
			#
			если индекс выше 10 файл с первым
			индексом перезаписывается
			log4j.appender.logfile.MaxFileSize=2048KB
			#
			если размер больше то начнется запись
			следующего по индексу файла
			<p>log4j.appender.logfile.layout=org.apache.log4j.PatternLayout</p>
			<p>log4j.appender.logfile.layout.ConversionPattern=%d
			[%t] %-5p %c - %m%n</p>
		</td></tr><tr valign="top"><td width="316"><strong>

<p class="western" style="margin-bottom: 0cm;"><font style="font-size: 8pt;" size="1"><strong><strong><strong><strong><strong>Вывод&nbsp;</strong></strong></strong></strong></strong></font><font style="font-size: 8pt;" size="1"><strong><strong><strong><strong><strong>на&nbsp;</strong></strong></strong></strong></strong></font><font style="font-size: 8pt;" size="1"><strong><strong><strong><strong><strong>консоль</strong></strong></strong></strong></strong></font><font style="font-size: 8pt;" size="1"><span lang="en-US"><strong><strong><strong><strong><strong>:</strong></strong></strong></strong></strong></span></font></p>
<p class="western" style="margin-bottom: 0cm;"><font style="font-size: 8pt;" size="1"><span lang="en-US"><strong><strong><strong><strong><strong>1:</strong></strong></strong></strong></strong></span></font><font style="font-size: 8pt;" size="1"><span lang="en-US">[INFO]
10:07:06 (Main.java:main:43)Available appender
org.apache.log4j.ConsoleAppender@10b4199 </span></font>
</p>
<p class="western" style="margin-bottom: 0cm;"><font style="font-size: 8pt;" size="1"><span lang="en-US"><strong><strong><strong><strong><strong>2:</strong></strong></strong></strong></strong></span></font><font style="font-size: 8pt;" size="1"><span lang="en-US">[INFO]
10:07:06 (Main.java:main:45)Hi Logger info! </span></font>
</p>
<p class="western" style="margin-bottom: 0cm;"><font style="font-size: 8pt;" size="1"><span lang="en-US"><strong><strong><strong><strong><strong>3:</strong></strong></strong></strong></strong></span></font><font style="font-size: 8pt;" size="1"><span lang="en-US">[DEBUG]
10:07:06 (Main.java:main:47)osdebug write! </span></font>
</p>
<p class="western" style="margin-bottom: 0cm;"><font style="font-size: 8pt;" size="1"><span lang="en-US"><strong><strong><strong><strong><strong>4:</strong></strong></strong></strong></strong></span></font><font style="font-size: 8pt;" size="1"><span lang="en-US">[WARN]
10:07:06 (Main.java:main:48)logfile write! </span></font>
</p>

<p class="western" style="margin-bottom: 0cm;"><font style="font-size: 8pt;" size="1"><strong><strong><strong><strong><strong>Вывод
в лог-файл D:\infolog.txt:</strong></strong></strong></strong></strong></font></p>
<p class="western" style="margin-bottom: 0cm;" lang="en-US"><font style="font-size: 8pt;" size="1">2009-09-15
10:07:06,811 [main] WARN  logfile - logfile write!</font></p>
<p class="western" style="margin-bottom: 0cm;"><font style="font-size: 8pt;" size="1"><strong><strong><strong><strong><strong>Вывод
в лог-файл D:\debuglog.txt:</strong></strong></strong></strong></strong></font></p>
<p class="western" style="margin-bottom: 0cm;" lang="en-US"><font style="font-size: 8pt;" size="1">2009-09-15
10:07:06,811 [main] DEBUG osdebug - osdebug write!</font></p>

			<p><br>
			</p>
		</strong></td><td width="382">
<p class="western" style="margin-bottom: 0cm;"><font style="font-size: 8pt;" size="1">В
строке 1 перечислены типы категорий,
которые были указаны в глобальном
объекте.</font></p>
<p class="western" style="margin-bottom: 0cm;"><font style="font-size: 8pt;" size="1">Строка
2 форматированная строка сообщения,
вызванная методом      </font><font style="font-size: 8pt;" size="1"><strong>LOG.info("Hi
Logger info!");</strong></font></p>
<p class="western" style="margin-bottom: 0cm;"><font style="font-size: 8pt;" size="1">Строка
3 форматированная строка сообщения,
вызванная методом      </font>
</p>
<p class="western" style="margin-bottom: 0cm;">     
<font style="font-size: 8pt;" size="1"><strong>&nbsp;&nbsp; &nbsp; localLog.debug("osdebug
write!");</strong></font></p>
<p class="western" style="margin-bottom: 0cm;"><font style="font-size: 8pt;" size="1">Строка
4 форматированная строка сообщения,
вызванная методом      </font>
</p>
<p class="western" style="margin-bottom: 0cm;">       
<font style="font-size: 8pt;" size="1"><strong>&nbsp;&nbsp; &nbsp; localLog2.warn("logfile
write!");</strong></font></p>
<p class="western" style="margin-bottom: 0cm;"><font style="font-size: 8pt;" size="1">Вывод
перенаправленный в лог файл, форматируется
по отдельным правилам , которые указаны
в категории </font><font style="font-size: 8pt;" size="1"><strong>log4.j.logger.logfile=INFO,
logfile </strong></font><font style="font-size: 8pt;" size="1">, а строка
форматируется на основании шаблона</font></p>
<p class="western" style="margin-bottom: 0cm;"><font style="font-size: 8pt;" size="1"><span lang="en-US"><strong>log4j.appen</strong></span></font><font style="font-size: 8pt;" size="1"><span lang="en-US"><strong>der.logfile.layout.ConversionPattern=%d
[%t] %-5p %c - %m%n</strong></span></font></p>
<p class="western" style="margin-bottom: 0cm;"><font style="font-size: 8pt;" size="1">таким
образом Вы в состоянии управлять
форматированием для разных типов
сообщений и для разных категорий.</font></p>
<p class="western" style="margin-bottom: 0cm;"><font style="font-size: 8pt;" size="1">В
файле конфигураций указана категория
</font><font style="font-size: 8pt;" size="1"><strong>log4.j.logger.logfile=INFO,
logfile</strong></font></p>
<p class="western" style="margin-bottom: 0cm;"><font style="font-size: 8pt;" size="1">но
вывод не будет направлен, даже если Вы
замените строку вызова        </font><font style="font-size: 8pt;" size="1"><strong>Logger
localLog = Logger.getLogger("logfile");</strong></font></p>
<p class="western" style="margin-bottom: 0cm;"><font style="font-size: 8pt;" size="1">потому
что данная категория не указана в
глобальном объекте, никаких сообщений
о ошибках выводится не будет!</font></p>

		</td></tr></tbody></table>
<p>В
примере создано два объекта журнала,
строки помечены как /*1*/ и /*2*/ , оба они
ссылаются на разные объекты!  В строках
/*3*/ создаётся объект enumeration ? если вы
вдруг просто слили чей-то конфиг и хотите
посмотреть что и как внутри , он выведет
все доступные(описанные) в файле
конфигураций объекты appender.</p>
<p>Будьте
внимательны при указании приоритета в
вызове объекта журнала, при указании
приоритета ,который не соответствует
описанному в конфигурации, данные не
будут записаны в журнал. Пример такого
описания:</p>

<table border="1" bordercolor="#000000" cellpadding="7" cellspacing="0" width="704">
	
	
	<tbody><tr valign="top"><td width="337">
			<p>Фрагмент
			в файле Main.java</p>
		</td><td width="337">
			<p>Фрагмент
			в файле log4j.properties</p>
		</td></tr><tr valign="top"><td width="337">
			<p>Logger
			localLog2 = Logger.getLogger("logfile");    
			</p>
			<p>localLog2.<strong><font class="Apple-style-span" color="#ff0000">debug</font></strong>("logfile
			write!");</p>
		</td><td width="337">
			log4j.logger.logfile=WARN,
			logfile
			<p><br>
			</p>
		</td></tr><tr valign="top"><td width="337">
			<p>В
			результате такого вызова данные не
			будут записаны в журнал!</p>
		</td><td width="337">
			<p><br>
			</p>
		</td></tr></tbody></table>

Вывод данных
на консоль и перехват всех направленных
сообщений в журнал стал возможен
благодаря тому что:
В глобальном
объекте <strong>log4j.rootLogger</strong> = TRACE, console , уровень
перехвата установлен самый низкий
(TRACE), и это позволяет перехватывать все
сообщения, приоритет которых выше по
иерархии.
<br>

<br></div><div><br>

<h2>Как использовать Log4J с
JavaEE/Сервлетами</h2>
      Использование
фреймворка в приложениях Enterprise Edition
имеет свои подводные камни, а именно
несколько вариантов получения ссылки
на объект журнала.
      <strong>Первый
вариант</strong> – процедура аналогичная Java
Application, т.е создание экземпляра объекта.
Однако этот
вариант в виду специфики веб-приложений,
оказывается мало пригодным к использованию,
так как контейнер будет многократно
создавать объект журналирования (Logger)
с помощью которого будет выполняться
запись в журнал.
      <strong>Второй
вариант </strong>– это создание объекта
отдельно и сохранение ссылки на него в
контексте приложения. Рассмотрим этот
вариант подробнее, что нам понадобится:
<br>

<ol>
	<li>Файл
	конфигурации журналирования
	log4j.properties;
	</li><li>Файл
	Log4jInit.java, в
	котором будет отдельный класс (этот
	класс наследуется от HttpServlet
	, чтобы в
	последствии, воспользоваться, возможностью
	WEB-контейнера загрузить этот класс) в
	этом классе описан процесс:
	
	<ol>
		<li><em>получения
		ссылки на файл конфигурации;</em>
		</li><li><em>создание
		атрибута в объекте ServletContext;</em>
		</li><li><em>сохранение
		в атрибуте ссылки на объект, ассоциированный
		с файлом конфигурации;</em>
	</li></ol>
	</li><li>файл web.xml ,
	в котором необходимо:
	<ol>
		<li>выполнить
		маппинг сервлета Log4jInit
		;
		</li><li>добавить
		параметр инициализации для сервлета
		Log4jInit, 
		
		</li><li>указать
		что Log4jInit надо
		загрузить обязательно первым;
	</li></ol>
	</li><li>Фрагмент
	кода, который продемонстрирует, как
	подключить логирование в Вашем
	веб-приложении.
</li></ol>
<p>
<br>
</p>
<table border="1" bordercolor="#000000" cellpadding="7" cellspacing="0" width="740">
	
	
	
	<tbody><tr valign="top"><td width="244">
			<p>Файл Log4jInit.java</p>
		</td><td width="274">
			<p>Файл web.xml (фрагмент)</p>
		</td><td width="178">
			<p>Заметки</p>
		</td></tr><tr valign="top"><td rowspan="5" height="179" width="244">
			<p>package
			apigw;</p>
			<p>import
			java.io.IOException;</p>
			<p>import
			java.io.PrintWriter;</p>
			<p>import
			javax.servlet.ServletException;</p>
			<p>import
			javax.servlet.http.HttpServlet;</p>
			<p>import
			javax.servlet.http.HttpServletRequest;</p>
			<p>import
			javax.servlet.http.HttpServletResponse;</p>
			<p>import
			org.apache.log4j.Logger;</p>
			<p>import
			org.apache.log4j.PropertyConfigurator;</p>
			/**
			 *
			 *
			@author generator
			 */
			<p>public
			class Log4jInit extends HttpServlet {</p>
			<p>
			@Override</p>
			<p>
			public void init(){</p>
			       String
			logfilename = getInitParameter("<strong>logfile</strong>");
			<span lang="uk-UA">/*</span>
			logfilename<span lang="uk-UA">
			 - получает имя файла конфигурации из
			пар-ра инициализации сервлета*/</span>
			       String
			pref ="";
			<p>
			pref =
			getServletContext().getRealPath("/");</p>
			/*pref
			– указывает на путь к файлу конфигурации*/
			       
			
			<p>PropertyConfigurator.configure(pref+logfilename);</p>
			<p>
			Logger globallog =
			Logger.getRootLogger();</p>
			
			getServletContext().setAttribute(new
			String("<strong>log4</strong>"),
			globallog);
			<p>
			getServletContext().setAttribute("logfilename",
			logfilename);</p>
			<p>
			globallog.info("Load-onstart-up
			Servlet");</p>
			<p><br>
			</p>
			<p>    }</p>
			<p>
			protected void
			processRequest(HttpServletRequest request, HttpServletResponse
			response)</p>
			<p>
			throws ServletException,
			IOException {</p>
			<p>
			response.setContentType("text/html;charset=UTF-8");</p>
			<p>
			PrintWriter out =
			response.getWriter();</p>
			<p>
			try {</p>
			<p>
			    String pref =
			getServletContext().getRealPath("/");</p>
			<p>
			    String logfile = (String)
			getServletContext().getAttribute("logfilename");</p>
			<p>
			    /* TODO output your page
			here  */</p>
			<p>
			    out.println("&lt;html&gt;&lt;head&gt;");</p>
			<p>
			    out.println("&lt;title&gt;Servlet
			Log4jInit&lt;/title&gt;");  
			</p>
			<p>
			    out.println("&lt;/head&gt;&lt;body&gt;");</p>
			<p>
			    out.println("&lt;h2&gt;File
			properties Log4jInit " + pref + logfile + "&lt;/h2&gt;");</p>
			<p>
			    out.println("&lt;/body&gt;&lt;/html&gt;");</p>
			<p>
			} finally {</p>
			
			out.close();
			        }
			<p>    }</p>
		</td><td width="274">
			<p> ………….
			  
			</p>
			<p>&lt;servlet&gt;</p>
			<p>
			&lt;servlet-name&gt;Log4jInit&lt;/servlet-name&gt;</p>
			<p>
			&lt;servlet-class&gt;apigw.Log4jInit&lt;/servlet-class&gt;</p>
			<p>
			&lt;init-param&gt;</p>
			&lt;param-name&gt;<strong>logfile</strong>&lt;/param-name&gt;
			<p>&lt;param-value&gt;WEB-INF/log4j.properties&lt;/param-value&gt;</p>
			<p>
			&lt;/init-param&gt;</p>
			<p>
			<strong>&lt;load-on-startup&gt;1&lt;/load-on-startup&gt;</strong></p>
			<p>
			&lt;/servlet&gt;</p>
			<p>
			&lt;servlet-mapping&gt;</p>
			<p>
			&lt;servlet-name&gt;Log4jInit&lt;/servlet-name&gt;</p>
			<p>
			&lt;url-pattern&gt;/Log4jInit&lt;/url-pattern&gt;</p>
			
			&lt;/servlet-mapping&gt;
			<p>…………….</p>
		</td><td width="178">
			Параметр
			
			<p><strong>&lt;load-on-startup&gt;1&lt;/load-on-startup&gt;</strong></p>
			сообщает
			контейнеру о том что необходимо
			загрузить servlet первым номером.
			Если
			не загрузить этот сервлет первым может
			возникнуть конфликтная ситуация при
			попытке обратиться к объектам Logger из
			других сервлетов,  объект может быть
			не создан.
			<p>Для
			сервлета создан параметр инициализации
			<strong>logfile </strong>в
			котором<strong> ,
			</strong>хранится
			путь к файлу конфигурации журнала.</p>
		</td></tr><tr valign="top"><td width="274">
			Файл вашего
			сервлета (фрагмент подключения)
			<p><br>
			</p>
		</td><td width="178">
			<p><br>
			</p>
		</td></tr><tr valign="top"><td width="274">
			<p>…………..</p>
			Logger
			log = (Logger)getServletContext().getAttribute("<strong>log4</strong>");
			<p>log.info("Enter
			to Servlet");</p>
			<p>………………..</p>
			<p>log.info("Exit
			to Servlet");</p>
		</td><td width="178">
			<p>Обратите
			внимание<span lang="uk-UA">,</span>
			что Вы получаете ссылку на объект
			через контекст приложения.</p>
		</td></tr><tr valign="top"><td width="274">
			<p>Файл log4j.properties</p>
		</td><td width="178">
			<p><br>
			</p>
		</td></tr><tr valign="top"><td width="274">
			<p><br>
			</p>
			<p>log4j.rootLogger=INFO,
			logfile</p>
			<p>log4j.appender.stdout=org.apache.log4j.ConsoleAppender</p>
			<p>log4j.appender.stdout.layout=org.apache.log4j.PatternLayout</p>
			<p>log4j.appender.stdout.layout.ConversionPattern=[%5p]
			%t %d{mm:ss} (%F:%M:%L)%n%m%n%n</p>
			<p>log4j.appender.stdout.Target=System.out</p>
			<p>#
			overview log file</p>
			<p>log4j.appender.logfile=org.apache.log4j.RollingFileAppender</p>
			log4j.appender.logfile.File=<strong>D:\\LOG\\listGW.log</strong>
			<p>log4j.appender.logfile.MaxFileSize=2048KB</p>
			<p>log4j.appender.logfile.layout=org.apache.log4j.PatternLayout</p>
			<p>log4j.appender.logfile.layout.ConversionPattern=%d{dd/MM/yyyy
			h:mm} [%t] %p - &lt;%m&gt;%n</p>
		</td><td width="178">
			<ol>
				<li>Файл
				необходимо разместить в каталоге
				«WEB-INF» для корректной работы примера
				или если Вы захотите, необходимо
				изменить размещение файла и изменить
				путь поиска в сервлете Log4jInit.java
				</li><li><p>Обратите
				внимание на путь к файлу журнала,
				пример был реализован для работы под
				управлением MS Windows XP, однако указание
				двойного слеша обязательно!</p>
			</li></ol>
		</td></tr><tr valign="top"><td width="244">
<p class="western" style="margin-bottom: 0cm;">Вывод в файл<span lang="en-US">:</span></p>
<p class="western" style="margin-bottom: 0cm;"><font style="font-size: 8pt;" size="1"><span lang="uk-UA"><strong>1:</strong></span></font><font style="font-size: 8pt;" size="1"><span lang="en-US">14/09/2009
4:29 [http-8080-Processor24] INFO - &lt;Load-onstart-up Servlet&gt;</span></font></p>
<p class="western" style="margin-bottom: 0cm;" lang="en-US"><font style="font-size: 8pt;" size="1">14/09/2009
4:30 [http-8080-Processor23] INFO - &lt;Enter to Servlet&gt;</font></p>
<p class="western" style="margin-bottom: 0cm;" lang="en-US"><font style="font-size: 8pt;" size="1">14/09/2009
4:30 [http-8080-Processor23] INFO - &lt;Exit to Servlet&gt;</font></p>

		</td><td width="274">
			Строка 1,
			запись добавлена сервлетом, который
			получил ссылку на объект журнала и
			добавляется в единственном экземпляре
			<p>Строки 2 и 3 добавлены
			произвольным сервлетом приложения,
			сервлет выполняет запись 2 раза и будет
			выполнять каждый раз при запросе
			страницы браузером, а сервлет загруженный
			первым запись выполнять не будет.</p>
		</td><td width="178">
			<p><br>
			</p>
		</td></tr></tbody></table>
<br>

<p>Используя
единую точку инициализации объекта
Logger, он создается всего один раз, поэтому
 не тратятся время и ресурсы на создание
объекта и получение ссылки на файл при
выполнении каждого сервлета из Вашего
веб приложения<span lang="uk-UA">,</span> в котором
есть необходимость журналирования
событий. Вы сможете использовать один
и тот же объект для логирования всего
приложения, получая необходимо ссылку
через контекст приложения.<br>
</p>
<strong><h2>Советы и приемы Log4J</h2></strong><h3>Log4J для исключений?!</h3><p>В
самых простых примерах, которых много
в сети, объект Logger
используется для логирования любых
событий.
</p>
<p>Оригинальным
способом использования именования
объектов аппендеров может быть
использование в качестве имени аппендера
имя класса <strong>java</strong><strong>.</strong><strong>lang</strong><strong>.</strong><strong>Exception</strong>:</p>
<p><br>
</p>
<table border="1" bordercolor="#000000" cellpadding="7" cellspacing="0" width="728">
	
	
	<tbody><tr valign="top"><td width="292">
			<p>Фрагмент пользовательского
			кода</p>
		</td><td width="406">
			<p>Фрагмент файла конфигурации
			журналирования</p>
		</td></tr><tr valign="top"><td width="292">
			<strong>1:</strong>String
			nameFile = "log4j.properties";
			<strong>2:</strong>PropertyConfigurator.configure(nameFile);
			<p>……………………….
			       
			</p>
			<p>try
			{</p>
			<strong>3:</strong>
			          throw new Exception("Try Me!");
			<p>
			} catch (Exception ex) {</p>
			<strong>4:</strong>Logger.getLogger(ex.getClass()).log(Level.ERROR,
			"Catch Exception!!!", ex);
			        }
			……………………….
			<p><br>
			</p>
		</td><td width="406">
			<strong>1:</strong>log4j.logger.<strong>java.lang.Exception</strong>=ALL,
			java.lang.Exception
			<p>log4j.appender.java.lang.Exception=org.apache.log4j.RollingFileAppender</p>
			<p>log4j.appender.java.lang.Exception.File=D:\\Exceptionlog.txt</p>
			<p>log4j.appender.java.lang.Exception.MaxFileSize=2048KB</p>
			<p>log4j.appender.java.lang.Exception.layout=org.apache.log4j.PatternLayout</p>
			<p>log4j.appender.java.lang.Exception.layout.ConversionPattern=%d
			[%t] %-5p %c - %m%n</p>
		</td></tr><tr valign="top"><td width="292">
			<p>Строки
			1,2 инициализируют файл конфигурации</p>
		</td><td width="406">
			Строка
			1 определяет объект аппендера именем
			класса исключений <strong>java</strong><strong>.</strong><strong>lang</strong><strong>.</strong><strong>Exception</strong>
			<p>далее
			определяется тип аппендера и остальные
			параметры относящееся к типу.</p>
		</td></tr><tr valign="top"><td width="292">
			Строка
			3 в блоке try catch эмулируется вызов
			Exception с передачей ему входной строки
			параметров
			Строка
			4 собственно создание объекта Logger
			Поскольку
			ранее объект Logger
			не был создан, у нас нет имени аппендера
			поэтому методом getLogger() мы получаем
			ссылку на этот объект передав в качестве
			параметра - ex.getClass()
			метод
			log() принимает в данном случае 
			
			<ul>
				<li>приоритет
				сообщения
				</li><li>Сообщение
				для записи в журнал
				</li><li><p>Объект
				класса Throwable мы же передадим объект
				Exception 
				</p>
			</li></ul>
		</td><td width="406">
<p class="western" style="margin-bottom: 0cm;"><font size="2">Вывод&nbsp;</font><font size="2">в&nbsp;</font><font size="2">файл&nbsp;</font><font size="2">журнала</font><font size="2"><span lang="en-US">:</span></font></p>
<p class="western" style="margin-bottom: 0cm;" lang="en-US"><font style="font-size: 8pt;" size="1">2009-09-16
10:13:02,018 [main] ERROR java.lang.Exception - Catch Exception!!!</font></p>
<p class="western" style="margin-bottom: 0cm;" lang="en-US"><font style="font-size: 8pt;" size="1">java.lang.Exception:
Try Me!</font></p>
<p class="western" style="margin-bottom: 0cm;" lang="en-US"><font style="font-size: 8pt;" size="1">	at
testlog4j.Main.main(Main.java:53)</font></p>

		</td></tr></tbody></table>
<p>Таким
образом, Вы получили возможность
записывать все исключительные ситуации,
перехваченные от объекта Exception
в один файл одной и той же конструкцией
вызова.</p>
<p>При
использовании этого механизма логирования
для любого источника исключительной
ситуации, придется немного изменить
конструкцию вызова:</p>
<table border="1" bordercolor="#000000" cellpadding="7" cellspacing="0" width="716">
	
	
	<tbody><tr valign="top"><td width="316">
			<p>Фрагмент пользовательского
			кода</p>
		</td><td width="370">
			<p>Фрагмент файла конфигурации
			журналирования</p>
		</td></tr><tr valign="top"><td width="316">
			<p>…………………………………<strong>.
			     </strong>
			</p>
			<p>  try
			{</p>

			<p>
			    throw new
			ArithmeticException(“Try Me ArithmeticException !”);</p>
			<p>
			} catch (ArithmeticException
			ex) {</p>
			
			Logger.getLogger(<strong>Exception.class.getName()</strong>).log(Level.ERROR,
			“Catch ArithmeticException !!!”, ex);
			<p>
			}</p>
			<p>
			try {</p>
			<p>
			    throw new Exception(“Try Me!!”);</p>
			<p>
			}</p>
			<p>
			catch (Exception ex) {</p>
			<p>
			    Logger.getLogger(ex.getClass()).log(Level.ERROR,
			“Catch Exception!!!”, ex);</p>
			<p>
			}</p>
			<p>…………………………………<strong>..</strong></p>
		</td><td width="370">
			<strong>1:</strong>log4j.logger.<strong>java.lang.Exception</strong>=ALL,
			java.lang.Exception
			<p>log4j.appender.java.lang.Exception=org.apache.log4j.RollingFileAppender</p>
			<p>log4j.appender.java.lang.Exception.File=D:\\Exceptionlog.txt</p>
			<p>log4j.appender.java.lang.Exception.MaxFileSize=2048KB</p>
			<p>log4j.appender.java.lang.Exception.layout=org.apache.log4j.PatternLayout</p>
			<p>log4j.appender.java.lang.Exception.layout.ConversionPattern=%d
			[%t] %-5p %c - %m%n</p>
		</td></tr><tr valign="top"><td width="316">
			Изменения
			заключаются в следующем, если для перехвата исключительной ситуации
			использовать объект ArithmeticException
			и конструкцию вызова идентичную
			первому примеру то запись в журнал не
			будет произведена, так как не будет
			найден одноименный аппендер. Поэтому
			для использования записи в тот же файл
			иных исключительных ситуаций конструкция
			вызова будет <span lang="uk-UA">кметь
			следующий вид</span>:
			<p>
			<strong>Logger</strong><strong>.</strong><strong>getLogger</strong><strong>(</strong><strong>Exception</strong><strong>.</strong><strong>class</strong><strong>.</strong><strong>getName</strong><strong>())
			или </strong><strong>Logger</strong><strong>.</strong><strong>getLogger</strong><strong>(</strong><span lang="uk-UA"><strong>«</strong></span>java.lang.Exception<span lang="uk-UA">»</span><span lang="uk-UA"><strong>)</strong></span><strong>
			– </strong>объект
			логгера необходимо определить
			однозначно не принимая во внимание
			информацию о классе вызвавшего
			исключительную ситуацию, это сделано
			для того что бы объект логгера совпал
			с объявленным объектом аппендера с
			файле конфигурации<span lang="uk-UA">.</span></p>
		</td><td width="370">
			Вывод в файл журнала:
			<p>2009-09-16
			11:25:30,447 [main] ERROR java.lang.Exception – Catch
			ArithmeticException !!!</p>
			<p>java.lang.ArithmeticException:
			Try Me ArithmeticException !</p>
			<p>	at
			testlog4j.Main.main(Main.java:54)</p>
			<p>2009-09-16
			11:25:30,447 [main] ERROR java.lang.Exception – Catch
			Exception!!!</p>
			<p>Java.lang.Exception:
			Try Me!!</p>
			<p>	At
			testlog4j.Main.main(Main.java:59)</p>
			<p><br></p></td></tr></tbody></table><h3>Эффективное использование Log4J или как снизить расходы на вычисление приоритета</h3><p style="text-indent: 1cm; margin-bottom: 0cm; widows: 0; orphans: 0;">Расходы на запись данных в журнал при
различных конфигурациях могут отличаться,
однако вычисление приоритета (LEVEL.INFO
&amp; etc) тоже является
достаточно дорогой процедурой во время
исполнения процесса.
</p>
<p style="text-indent: 1cm; margin-bottom: 0cm; widows: 0; orphans: 0;">
Как же минимизировать расходы на
вычислении приоритета?</p>
<p style="text-indent: 1cm; margin-bottom: 0cm; widows: 0; orphans: 0;">
Для этой задачи в&nbsp;<strong>log</strong><strong>4</strong><strong>j&nbsp;</strong>есть статические методы позволяющие
выполнять вычисление приоритета:</p>
<ul>
	<li><p style="margin-bottom: 0cm; widows: 0; orphans: 0;">
	isEnabledFor(<strong>LEVEL.XXX</strong>);</p>
	</li><li><p style="margin-bottom: 0cm; widows: 0; orphans: 0;">
	isDebugEnabled();</p>
	</li><li><p style="margin-bottom: 0cm; widows: 0; orphans: 0;">
	is<em><strong>XXX</strong></em>Enabled()
	– гдеХХХприоритет (DEBUG, WARN &amp;
	etc).</p></li></ul>
          Кроме
того вычисление некоторых  подставных
переменных выражения, при использовании
PatternLayout так же могут
снижать скорость выполнения записи в
журнал. Согласно спецификации для класса
PatternLayout это следующие
переменные:
<ul>
	<li>%С – вычисление
	имени класса;
	</li><li>%F
	– вычисление имени файла;
	</li><li>%M
	– вычисление имени метода;
	</li><li>%L
	– вычисление номера строки.<br>Как
вариант, эти данные можно вычислить
самостоятельно и передать в теле
сообщения.</li></ul><div><br></div>
</div>
</div>
    </div>
    <div class="vote" id="votePost">
                <p>Если Вам понравилась статья, проголосуйте за нее</p>
        <a id="showVoters" href="http://www.quizful.net/post/log4j-quickstart#">Голосов</a>: <span>12</span>
        <button>Голосовать</button> &nbsp;<img src="./Быстрый старт с Log4j_files/loading(1).gif" align="absmiddle" alt="loading..." style="display:none;">
        <script type="text/javascript">
                        $("#votePost button").click(function() {
                location.replace("/LoginAction.forbidden");
                return false;
            });
                    </script>
            </div>
    <script type="text/javascript">
        $("#showVoters").toggle(function() {
            $("#voters").stop(true, true);
            $("#voters").slideDown();
            $("#voters").removeClass("closed").addClass("opened");
            return false;
        }, function() {
            $("#voters").stop(true, true);
            $("#voters").slideUp();
            $("#voters").removeClass("opened").addClass("closed");
            return false;
        });
    </script>
    <div id="voters" class="closed">
                <nobr><img height="24" src="./Быстрый старт с Log4j_files/art" align="absmiddle"> art</nobr>&nbsp;&nbsp;
                <nobr><img height="24" src="./Быстрый старт с Log4j_files/admin" align="absmiddle"> <a href="http://www.quizful.net/user/admin">admin</a></nobr>&nbsp;&nbsp;
                <nobr><img height="24" src="./Быстрый старт с Log4j_files/yohan" align="absmiddle"> <a href="http://www.quizful.net/user/yohan">yohan</a></nobr>&nbsp;&nbsp;
                <nobr><img height="24" src="./Быстрый старт с Log4j_files/generator" align="absmiddle"> <a href="http://www.quizful.net/user/generator">generator</a></nobr>&nbsp;&nbsp;
                <nobr><img height="24" src="./Быстрый старт с Log4j_files/SanS" align="absmiddle"> <a href="http://www.quizful.net/user/SanS">SanS</a></nobr>&nbsp;&nbsp;
                <nobr><img height="24" src="./Быстрый старт с Log4j_files/Shurfll" align="absmiddle"> <a href="http://www.quizful.net/user/Shurfll">Shurfll</a></nobr>&nbsp;&nbsp;
                <nobr><img height="24" src="./Быстрый старт с Log4j_files/mismatch" align="absmiddle"> <a href="http://www.quizful.net/user/mismatch">mismatch</a></nobr>&nbsp;&nbsp;
                <nobr><img height="24" src="./Быстрый старт с Log4j_files/prostodenis" align="absmiddle"> <a href="http://www.quizful.net/user/prostodenis">prostodenis</a></nobr>&nbsp;&nbsp;
                <nobr><img height="24" src="./Быстрый старт с Log4j_files/f_r_o_s_t" align="absmiddle"> <a href="http://www.quizful.net/user/f_r_o_s_t">f_r_o_s_t</a></nobr>&nbsp;&nbsp;
                <nobr><img height="24" src="./Быстрый старт с Log4j_files/viacheslav_21" align="absmiddle"> viacheslav_21</nobr>&nbsp;&nbsp;
                <nobr><img height="24" src="./Быстрый старт с Log4j_files/okupriianova" align="absmiddle"> okupriianova</nobr>&nbsp;&nbsp;
                <nobr><img height="24" src="./Быстрый старт с Log4j_files/kato_kun" align="absmiddle"> kato_kun</nobr>&nbsp;&nbsp;
            </div>
</div>
<div style="margin-top:15px;" id="shareThis"><table cellspacing="0" cellpadding="0" id="vkshare0" onmouseover="VK.Share.change(1, 0);" onmouseout="VK.Share.change(0, 0);" onmousedown="VK.Share.change(2, 0);" onmouseup="VK.Share.change(1, 0);" style="position: relative; width: auto; cursor: pointer; border: 0px;"><tbody><tr style="line-height: normal;"><td style="vertical-align: middle;"><a href="http://vkontakte.ru/share.php?url=http%3A%2F%2Fwww.quizful.net%2Fpost%2Flog4j-quickstart" onmouseup="this._btn=event.button;this.blur();" onclick="return VK.Share.click(0, this);" style="text-decoration:none;"><div style="height: 21px; cursor:pointer; width: 2px; background: url(https://vk.com/images/btns.png) no-repeat -21px -42px;"></div></a></td><td style="vertical-align: middle;"><a href="http://vkontakte.ru/share.php?url=http%3A%2F%2Fwww.quizful.net%2Fpost%2Flog4j-quickstart" onmouseup="this._btn=event.button;this.blur();" onclick="return VK.Share.click(0, this);" style="text-decoration:none;"><div style="border: 1px solid #3b6798; cursor:pointer; border-left: 0px;"><div style="border: 1px solid #5c82ab; border-left: 0px; border-top-color: #7e9cbc; background-color: #6d8fb3; color: #fff; text-shadow: 0px 1px #45688E; height: 15px; padding: 2px 4px 0px 6px; font-family: tahoma, arial; font-size: 10px;">Поделиться</div></div></a></td><td style="vertical-align: middle;"><a href="http://vkontakte.ru/share.php?url=http%3A%2F%2Fwww.quizful.net%2Fpost%2Flog4j-quickstart" onmouseup="this._btn=event.button;this.blur();" onclick="return VK.Share.click(0, this);" style="text-decoration:none;"><div style="background-image: url(https://vk.com/images/btns.png); background-attachment: initial; background-origin: initial; background-clip: initial; background-color: initial; cursor: pointer; height: 21px; width: 22px; background-position: 0px -21px; background-repeat: no-repeat no-repeat; "></div></a></td><td style="vertical-align: middle;"><a href="http://vkontakte.ru/share.php?url=http%3A%2F%2Fwww.quizful.net%2Fpost%2Flog4j-quickstart" onmouseup="this._btn=event.button;this.blur();" onclick="return VK.Share.click(0, this);" style="text-decoration:none;"><div style="border-top-style: solid; border-right-style: solid; border-bottom-style: solid; border-left-style: solid; border-top-color: rgb(162, 185, 211); border-right-color: rgb(162, 185, 211); border-bottom-color: rgb(162, 185, 211); border-left-color: rgb(162, 185, 211); border-image: initial; border-top-width: 1px; border-right-width: 0px; border-bottom-width: 1px; border-left-width: 0px; cursor: pointer; background-color: rgb(222, 230, 241); color: rgb(0, 0, 0); height: 15px; padding-top: 2px; padding-right: 6px; padding-bottom: 0px; padding-left: 4px; font-size: 10px; font-weight: bold; font-family: tahoma, arial; display: none; ">0</div></a></td><td style="vertical-align: middle;"><a href="http://vkontakte.ru/share.php?url=http%3A%2F%2Fwww.quizful.net%2Fpost%2Flog4j-quickstart" onmouseup="this._btn=event.button;this.blur();" onclick="return VK.Share.click(0, this);" style="text-decoration:none;"><div style="background-image: url(https://vk.com/images/btns.png); background-attachment: initial; background-origin: initial; background-clip: initial; background-color: initial; cursor: pointer; width: 2px; height: 21px; display: none; background-position: -27px -42px; background-repeat: initial initial; "></div></a></td></tr></tbody></table><a name="fb_share" type="button_count" share_url="www.quizful.net%2Fpost%2Flog4j-quickstart" href="http://www.facebook.com/sharer.php?u=www.quizful.net%252Fpost%252Flog4j-quickstart&src=sp" style="text-decoration: none; "><span class="fb_share_size_Small "><span class="FBConnectButton FBConnectButton_Small" style="cursor:pointer;"><span class="FBConnectButton_Text">Share</span></span><span class="fb_share_count_nub_right fb_share_no_count"></span><span class="fb_share_count fb_share_no_count fb_share_count_right"><span class="fb_share_count_inner">&nbsp;</span></span></span></a><a href="http://www.google.com/buzz/post" class="google-buzz-button" title="Post to Google Buzz" data-url="http://www.quizful.net/post/log4j-quickstart" data-imageurl="http://quizful.net/res/img/logo.png" data-button-style="small-count"></a><iframe allowtransparency="true" frameborder="0" scrolling="no" src="./Быстрый старт с Log4j_files/tweet_button.1335513764.htm" class="twitter-share-button twitter-count-horizontal" style="width: 110px; height: 20px; " title="Twitter Tweet Button"></iframe></div>
<div id="post-comments"><div class="comments"><div id="comments-top" class="topic-panel"><div class="total">Комментариев: 2</div><a href="" class="order-link">↑</a><a class="refresh-link" href="">обновить</a></div><div class="comment-block" id="4977224923601182185"><div class="head"><span class="author"><img src="./Быстрый старт с Log4j_files/fever-007" height="24px" style="vertical-align:middle;margin-bottom:4px;"> &nbsp;<a href="http://www.quizful.net/user/fever-007" rel="nofollow">fever-007</a></span><span class="created">24.11.2011 | 11:00:24</span><a class="link" href="http://www.quizful.net/post/log4j-quickstart#4977224923601182185">#</a></div><div class="text">ссылка битая, поменяйте на <a href="http://www.log4j.ru/articles/HelloWorld.html">http://www.log4j.ru/articles/HelloWorld.html</a></div><a class="reply-link" href="">ответить</a><div class="sub-comments"></div></div><div class="comment-block" id="5561690658911555539"><div class="head"><span class="author"><img src="./Быстрый старт с Log4j_files/viacheslav_21" height="24px" style="vertical-align:middle;margin-bottom:4px;"> &nbsp;viacheslav_21</span><span class="created">15.07.2011 | 14:29:42</span><a class="link" href="http://www.quizful.net/post/log4j-quickstart#5561690658911555539">#</a></div><div class="text">Спасибо за статью! Очень помогла!</div><a class="reply-link" href="">ответить</a><div class="sub-comments"></div></div><form class="comment-form"><div class="title">Добавить комментарий</div><div class="errors" style="display: none; "></div><textarea></textarea><div class="buttons"><button>Отправить</button> </div></form></div></div>
<style>@import '/comments/comments.css?1';</style>

<script src="./Быстрый старт с Log4j_files/comments.js"></script>
<script>document.getElementById('post-comments').appendChild(new Comments.Panel('post/log4j-quickstart', {onLoad:Markup}));</script>

<script type="text/javascript">
    ShareThis(jQuery("#shareThis"), window.location, jQuery("title").html(), jQuery('head meta[name=description]').attr('Content'));
</script>
            <br class="clear">
        </div>
        <br class="clear">
    </div>

    <div id="footer">
        <b></b>
        <a class="forteko" target="_blank" href="http://www.forteko.com/" title="Forteko"></a>
                <div class="twitter"><a target="_blank" href="http://www.twitter.com/quizful" title="Twitter" onclick="pageTracker._trackPageview(&#39;/twitter&#39;); return true;">Twitter</a></div>
        <div class="vkontakte"><a target="_blank" rel="nofollow" href="http://vkontakte.ru/club8978114" title="VKontakte" onclick="pageTracker._trackPageview(&#39;/vkontakte&#39;); return true;">Контакте</a></div>
        <span class="title">Наши представительства</span>
    </div>
    <script type="text/javascript">
    if (window.location.host == 'www.quizful.net')
        document.write(unescape("%3Cscript src='/res/ga.js' type='text/javascript'%3E%3C/script%3E"));
    </script><script src="./Быстрый старт с Log4j_files/ga.js" type="text/javascript"></script>
    <script type="text/javascript">
    if (window.location.host == 'www.quizful.net') {
        var pageTracker = _gat._getTracker("UA-199293-2");
        pageTracker._initData();
        pageTracker._trackPageview();
    }
    </script>


</body></html>